package intermouse;

import java.io.BufferedReader;
import java.io.Console;
import java.io.IOException;
import java.io.InputStreamReader;

/**
 * Egy singleton osztály, mely nyilvántartja, hogy melyik spray-ből még mennyi
 * fújása van a játékosnak.
 * 
 * @author Demény Fruzsina Gyöngyi, Greff Balázs
 * @version 1.0
 * @since 2013-03-23
 */
public class GameState {

	/************* Attributes *****************/
	
	private static GameState instance=null; 

	/**
	 * Megadja, hogy mennyi hangyairtospray fújás van még.
	 */
	private int antKillerSpraysLeft = 45;
	/**
	 * Megadja, hogy mennyi hangyaszag semlegesítő spray fújás van még.
	 */
	private int antDeodorantSpraysLeft = 60;

	/**
	 * Megadja, hogy használunk-e véletlengenerátort a játékban. Ha hamis akkor teljesen determinisztikusan fog futni a program.
	 */
	private static boolean useRandomSteps = true;
	
	/**
	 * A játékban elért pontszám
	 */
	private int playerScore = 0;
	
	/************* Constructors *****************/


	/**
	 * Az osztály default konstruktora.
	 */
	protected GameState() {

	}

	/************* Getters *****************/
	
	/**
	 * Visszaadja a singleton példányt.
	 * @return
	 */
	public static GameState getInstance(){
		if(instance==null)
			instance = new GameState();
		return instance;
	}
	
	public static void reset(){
			instance = new GameState();
	}

	/**
	 * Megadja, az antKillerSpraysLeft változó értékét.
	 * 
	 * @throws IOException
	 * @return Visszaadja az antDeodorantSpraysLeft változó értékét, ami integer
	 *         típusú.
	 */
	public int getAntKillerSpraysLeft() {
//		Logger.printToConsole(">> GameState.getAntKillerSpraysLeft() : int");
//		System.out.print("antKillerSpraysLeft (int)?: ");
//		BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
//		int userInput = Integer.parseInt(br.readLine());
//		Logger.printToConsole("<< return" + userInput);
//		return userInput;
		return antKillerSpraysLeft;
	}

	/**
	 * Megadja, hogy használunk-e véletlen elemeket a játékban.
	 * 
	 * @return Visszaadja az useRandomSteps változó értékét, ami boolean
	 *         típusú.
	 */
	public static boolean getUseRandomSteps() {
		return useRandomSteps;
	}
	
	/**
	 * Megadja, az antDeodorantSpraysLeft változó értékét.
	 * 
	 * @throws IOException
	 * @return Visszaadja az antDeodorantSpraysLeft változó értékét, ami integer
	 *         típusú.
	 */
	public int getAntDeodorantSpraysLeft() {
//		Logger.printToConsole(">> GameState.getAntDeodorantSpraysLeft() : int");
//		//System.out.print("antKillerSpraysLeft (int)?: ");
//		BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
//		int userInput = Integer.parseInt(br.readLine());
//		Logger.printToConsole("<< return" + userInput);
//		return userInput;
		return antDeodorantSpraysLeft;
	}
	
	/**
	 * Visszaadja a playerScore változó értékét
	 */
	public int getPlayerScore(){
		return playerScore;
	}

	/************* Setters *****************/

	/**
	 * Beállítja az antKillerSpraysLeft változó értékét.
	 * 
	 * @param Az
	 *            antKillerSpraysLeft új értéke.
	 */
	public void setAntKillerSpraysLeft(int i) {
		Logger.printToConsole(">> GameState.setAntKillerSpraysLeft(i:int) : void");
		Logger.printToConsole("<< return");
		antKillerSpraysLeft = i;
	}

	/**
	 * Beállítja az antDeodorantSpraysLeft változó értékét.
	 * 
	 * @param Az
	 *            antDeodorantSpraysLeft új értéke.
	 */
	public void setAntDeodorantSpraysLeft(int i) {
		System.out
				.println(">> GameState.setAntDeodorantSpraysLeft(i:int) : void");
		Logger.printToConsole("<< return");
		antDeodorantSpraysLeft = i;
	}
	
	/**
	 * Beállítja a playerScore változó értékét.
	 * 
	 * @param az új érték
	 */
	public void setplayerScore(int score){
		playerScore = score;
	}
	
	public void addToPlayerScore(int scoreplus){
		playerScore += scoreplus;
	}
}
